﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NUnit.Framework;

namespace Working.Domínio.Teste
{
    [TestFixture]
    public class TestePessoa
    {
        [Test]
        public void TestarConstrutorComParâmetros()
        {
            string nome = "Guilherme Andrade Del Cantoni";
            DateTime dataDeNascimento = new DateTime(1984, 03, 11);
            Pessoa pessoa = new Pessoa(nome, dataDeNascimento);

            Assert.AreEqual(nome, pessoa.Nome);
            Assert.AreEqual(dataDeNascimento, pessoa.DataDeNascimento);
            Assert.AreEqual(Sexo.Masculino, pessoa.Sexo);
            Assert.AreEqual(null, pessoa.CarteiraDeIdentidade);
            Assert.AreEqual(null, pessoa.EndereçoResidêncial);
            Assert.AreEqual(null, pessoa.Nacionalidade);
            Assert.AreEqual(string.Empty, pessoa.NomeDaMãe);
            Assert.AreEqual(string.Empty, pessoa.NomeDoPai);
            Assert.AreEqual(EstadoCivil.Solteiro, pessoa.EstadoCivil);
            Assert.AreEqual(null, pessoa.Naturalidade);
            Assert.AreEqual(null, pessoa.Cpf);
        }

        [Test]
        public void TestarPropriedades()
        {
            string nome = "Guilherme Andrade Del Cantoni";
            DateTime dataDeNascimento = new DateTime(1984, 03, 11);
            Pessoa pessoa = new Pessoa(nome, dataDeNascimento);

            //Atribui propriedades de pessoa
            nome = "Edson Arantes do Nascimento";
            pessoa.Nome = nome;

            dataDeNascimento = new DateTime(1950, 12, 25);
            pessoa.DataDeNascimento = dataDeNascimento;

            Endereço endereçoResidêncial = new Endereço();
            pessoa.EndereçoResidêncial = endereçoResidêncial;

            País nacionalidade = new País("Brasil");
            pessoa.Nacionalidade = nacionalidade;

            string nomeMãe = "Valéria de Souza Andrade";
            pessoa.NomeDaMãe = nomeMãe;

            string nomePai = "Magno Del Cantoni";
            pessoa.NomeDoPai = nomePai;

            Sexo sexo = Sexo.Masculino;
            pessoa.Sexo = sexo;

            EstadoCivil estadoCivil = EstadoCivil.Casado;
            pessoa.EstadoCivil = estadoCivil;

            Cidade localDeNascimento = new Cidade("Belo Horizonte");
            pessoa.Naturalidade = localDeNascimento;

            string cpf = "068.423.066.63";
            pessoa.Cpf = cpf;
            
            Assert.AreEqual(nome, pessoa.Nome);
            Assert.AreEqual(dataDeNascimento, pessoa.DataDeNascimento);
            Assert.AreEqual(endereçoResidêncial, pessoa.EndereçoResidêncial);
            Assert.AreEqual(nacionalidade, pessoa.Nacionalidade);
            Assert.AreEqual(nomeMãe, pessoa.NomeDaMãe);
            Assert.AreEqual(nomePai, pessoa.NomeDoPai);
            Assert.AreEqual(sexo, pessoa.Sexo);
            Assert.AreEqual(estadoCivil, pessoa.EstadoCivil);
            Assert.AreEqual(localDeNascimento, pessoa.Naturalidade);
            Assert.AreEqual(cpf, pessoa.Cpf);
        }

        [Test]
        public void TestarAtribuirIdentidade1()
        {
            string nome = "Guilherme Andrade Del Cantoni";
            DateTime dataDeNascimento = new DateTime(1984,03,11);
            Pessoa pessoa = new Pessoa(nome, dataDeNascimento);

            string registroGeral = "MG-11.617.344";

            pessoa.AtribuirIdentidade(registroGeral);
            Assert.IsNotNull(pessoa.CarteiraDeIdentidade);
            Assert.AreEqual(registroGeral, pessoa.CarteiraDeIdentidade.RegistroGeral);
            Assert.AreEqual(nome, pessoa.CarteiraDeIdentidade.Nome);
            Assert.AreEqual(dataDeNascimento, pessoa.CarteiraDeIdentidade.DataDeNascimento);
            Assert.AreEqual(DateTime.MinValue, pessoa.CarteiraDeIdentidade.DataDeExpedição);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.Naturalidade);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.NomeMãe);            
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.NomePai);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.OrgãoEmissor);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.UnidadeFederativa);
        }

        [Test]
        public void TestarAtribuirIdentidade2()
        {
            string nome = "Guilherme Andrade Del Cantoni";
            DateTime dataDeNascimento = new DateTime(1984,03,11);
            Pessoa pessoa = new Pessoa(nome, dataDeNascimento);
            
            string registroGeral = "MG-11.617.344";
            DateTime dataDeExpedição = new DateTime(1990,01,01);

            pessoa.AtribuirIdentidade(registroGeral, dataDeExpedição);
            Assert.IsNotNull(pessoa.CarteiraDeIdentidade);
            Assert.AreEqual(registroGeral, pessoa.CarteiraDeIdentidade.RegistroGeral);
            Assert.AreEqual(nome, pessoa.CarteiraDeIdentidade.Nome);
            Assert.AreEqual(dataDeNascimento, pessoa.CarteiraDeIdentidade.DataDeNascimento);
            Assert.AreEqual(dataDeExpedição, pessoa.CarteiraDeIdentidade.DataDeExpedição);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.Naturalidade);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.NomeMãe);            
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.NomePai);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.OrgãoEmissor);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.UnidadeFederativa);
        }

        [Test]
        public void TestarAtribuirIdentidade3()
        {
            string nome = "Guilherme Andrade Del Cantoni";
            DateTime dataDeNascimento = new DateTime(1984,03,11);
            Pessoa pessoa = new Pessoa(nome, dataDeNascimento);            

            string registroGeral = "MG-11.617.344";
            DateTime dataDeExpedição = new DateTime(1900,01,01);
            string orgãoEmissor = "SSP";
            string uf = "MG";

            pessoa.AtribuirIdentidade(registroGeral, dataDeExpedição, orgãoEmissor, uf);
            Assert.IsNotNull(pessoa.CarteiraDeIdentidade);
            Assert.AreEqual(registroGeral, pessoa.CarteiraDeIdentidade.RegistroGeral);
            Assert.AreEqual(nome, pessoa.CarteiraDeIdentidade.Nome);
            Assert.AreEqual(dataDeNascimento, pessoa.CarteiraDeIdentidade.DataDeNascimento);
            Assert.AreEqual(dataDeExpedição, pessoa.CarteiraDeIdentidade.DataDeExpedição);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.Naturalidade);
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.NomeMãe);            
            Assert.AreEqual(string.Empty, pessoa.CarteiraDeIdentidade.NomePai);
            Assert.AreEqual(orgãoEmissor, pessoa.CarteiraDeIdentidade.OrgãoEmissor);
            Assert.AreEqual(uf, pessoa.CarteiraDeIdentidade.UnidadeFederativa);
        }

        [Test]
        [ExpectedException(typeof(ArgumentException))]
        public void TestarAtribuirIdentidadeComParâmetroNulo()
        {
            string nome = "Guilherme Andrade Del Cantoni";
            DateTime dataDeNascimento = new DateTime(1984, 03, 11);
            Pessoa pessoa = new Pessoa(nome, dataDeNascimento);

            string registroGeral = string.Empty;
            DateTime dataDeExpedição = new DateTime(1900, 01, 01);

            pessoa.AtribuirIdentidade(registroGeral, dataDeExpedição);
        }
    }
}
